/**
 *  @ Desc 许继 103 tcp通信客户端界面实现类，提供参数设置 和 收发操作界面
 *
 *
 * */

#ifndef PANELXJ_TCPCLIENT
#define PANELXJ_TCPCLIENT

#include <QWidget>
#include "XJ/XJConnection.h"
#include "XJ/XJ103_Parser.h"
#include "PanelBill.h"
#include "CommBase.h"

namespace Ui {
class PanelXJ_TCPClient;
}

class PanelXJ_TCPClient : public QWidget, public CommBase
{
    Q_OBJECT
public:
    explicit PanelXJ_TCPClient(QWidget *parent = nullptr);
    ~PanelXJ_TCPClient();

    void connectDevice(QString devAddr, QString devPort, QString localAddr, QString localPort) override;
    void readDeviceAll() override;
    void showTable() override;

signals:
    void sig_sendClicked();    //发送消息信号
    void sig_connect();
    //void sig_parseFinished(QStringList, int);    // parser层解析完后通知 table更新数据

private slots:
    void slot_send();   // 发送消息
    void slot_recv();   // 接收消息3
    void slot_connect();
    void slot_updateUiAsDisconnect();
    void slot_updateUiAsConnected();
    void slot_updateUiAsSend(QString sendMsg);

    void on_pushButtonConnect_clicked();

    void on_pushButtonClear_clicked();

    // 选择对应命令发送给保护
    void on_pushButtonSendCombox_clicked();

    void on_radioButtonHeart_clicked(bool checked);

    // 选择读取指定组的信息
    void on_pushButtonReadGroup_clicked();

    // 读取定值有关组的信息
    void slot_pushButtonReadAll_clicked();

    void slot_setCanReadBillInfo();

    // 展示定值模板
    void slot_pushButtonShowBill_clicked();

private:
    Ui::PanelXJ_TCPClient *ui;
    XJConnection *m_client;   // 通信套接字接口
    XJ103Constructer m_nrjbPacketConstructer;
    XJ103_Parser m_Parser;
    PanelBill m_panelBill;    //显示装置定值信息模板

    //  通信参数配置
//    QString m_destDevAddr;  // 保护设备的ip地址
    QString m_ip;       // 保护设备的 ip地址
    QString m_port;        // 保护上的tcp监听服务端口
    // 在tcp 连接成功后进行初始化
    QString m_srcAddr;      //   103 源设备地址，也就是本机ip地址的后  

    bool m_isCanGetBillInfo; // true --已经获取到各组标题信息， false -- 待获取分组信息

    // 读取全部定值组的有关信息
    void readAllGroupsInfo();
    void readAllTitlesInfo();

    QByteArrayList m_recvList;
    QTimer m_timerConnectDev;
};
#endif // XJ_TCPCLIENT
